/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.eurotrader.consulta;

import br.com.eurotrader.controller.BaseController;
import br.com.eurotrader.utils.FacesUtils;
import br.com.eurotrader.utils.MetodosBotoes;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.DateTimeConverter;
import javax.faces.convert.NumberConverter;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.inject.Named;

/**
 *
 * @author PROG01
 */
@Named(value="consultaSimples")
public class ConsultaSimplesBean {

    private String somCampo = new String();

    public String getSomCampo() {
        return somCampo;
    }

    public void setSomCampo(String somCampo) {
        this.somCampo = somCampo;
    }        
//
//    public HtmlSelectOneMenu getSomCampo() {
//        return somCampo;
//    }
//
//    public void setSomCampo(HtmlSelectOneMenu hsom) {
//        this.somCampo = hsom;
//    }
    private String somOperador = new String();

    public String getSomOperador() {
        return somOperador;
    }

    public void setSomOperador(String somOperador) {
        this.somOperador = somOperador;
    }
        
//
//    public HtmlSelectOneMenu getSomOperador() {
//        return somOperador;
//    }
//
//    public void setSomOperador(HtmlSelectOneMenu hsom) {
//        this.somOperador = hsom;
//    }
    
    private String itTexto = "";

    public String getItTexto() {
        return itTexto;
    }

    public void setItTexto(String itTexto) {
        this.itTexto = itTexto;
    }        
    
//    private HtmlInputText itTexto = new HtmlInputText();
//
//    public HtmlInputText getItTexto() {
//        return itTexto;
//    }
//
//    public void setItTexto(HtmlInputText hit) {
//        this.itTexto = hit;
//    }
    private Converter conversor;

    public Converter getConversor() {
        return conversor;
    }

    public void setConversor(Converter conversor) {
        this.conversor = conversor;
    }

     public void consultar(ActionEvent event) {
         System.out.println("consulta simples");
         if ((itTexto == null) || (itTexto.trim().equals(""))) {
//            FacesUtils.addInfoMessage("Erro de Validação. Valor é Obrigatório.");
            return;
        }
         System.out.println("itTexto  " + itTexto);
         
//        UIInput input = (UIInput) event.getComponent().findComponent("itTexto");
//        if ((input.getValue() == null) || (input.getValue().toString().trim().equals(""))) {
//            FacesUtils.addInfoMessage(input.getClientId(), "Erro de Validação. Valor é Obrigatório.");
//            return;
//        }
        String textoConvertido = itTexto.toString().replace("'", "''");
        Criterio criterio = new Criterio(getSomCampo(), getSomOperador(), textoConvertido);
        String sql = "";
        String nomeClasse;
        String nomeDaPagina = FacesContext.getCurrentInstance().getViewRoot().getViewId().toString();
        BaseController controler = ((MetodosBotoes) FacesUtils.getManagedBean("botoes")).getControllerPagina();
        if (nomeDaPagina.toUpperCase().equals("LOG DE OPERAÇÕES")) {
            nomeClasse = "LogOperacoes";
        } else {
            nomeClasse = controler.getObjeto().getClass().getSimpleName();
        }
        String tabelas = "";

        String campo = (String) controler.getRelacoes().get(criterio.getColuna());
        if (campo.indexOf("/") != -1) {
            tabelas = campo.substring(0, campo.indexOf("/"));
            campo = campo.substring(campo.indexOf("/") + 1, campo.length());
        }
        sql = "SELECT DISTINCT c FROM " + nomeClasse + " c " + tabelas + " WHERE (";
        campo = campo.substring(0,1).toLowerCase().concat(campo.substring(1));
        sql += ("upper(c." + campo + ")");  //+ campo + ")");

        if (criterio.getOperador().toLowerCase().trim().equals("igual a")) {
            sql = sql + " = upper('" + criterio.getTexto() + "')";
        } else if (criterio.getOperador().toLowerCase().trim().equals("maior que")) {
            sql = sql + " > " + criterio.getTexto();
        } else if (criterio.getOperador().toLowerCase().trim().equals("menor que")) {
            sql = sql + " < " + criterio.getTexto();
        } else if (criterio.getOperador().toLowerCase().trim().equals("maior ou igual")) {
            sql = sql + " >= " + criterio.getTexto();
        } else if (criterio.getOperador().toLowerCase().trim().equals("menor ou igual")) {
            sql = sql + " <= " + criterio.getTexto();
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data igual a"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora igual a"))) {
            sql = sql + " = '" + criterio.getTexto() + "'";
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data menor que"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora menor que"))) {
            sql = sql + " < '" + criterio.getTexto() + "'";
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data maior que"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora maior que"))) {
            sql = sql + " > '" + criterio.getTexto() + "'";
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data menor ou igual"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora menor ou igual"))) {
            sql = sql + " <= '" + criterio.getTexto() + "'";
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data maior ou igual"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora maior ou igual"))) {
            sql = sql + " >= '" + criterio.getTexto() + "'";
        } else if (criterio.getOperador().toLowerCase().trim().equals("contendo")) {
            sql = sql + " LIKE '%" + criterio.getTexto().toUpperCase() + "%'";
        } else if (criterio.getOperador().toLowerCase().trim().equals("iniciando com")) {
            sql = sql + " LIKE '" + criterio.getTexto().toUpperCase() + "%'";
        } else if (criterio.getOperador().toLowerCase().trim().equals("terminando com")) {
            sql = sql + " LIKE '%" + criterio.getTexto().toUpperCase() + "'";
        } else if (criterio.getOperador().toLowerCase().trim().equals("diferente de")) {
            sql = sql + " <> '" + criterio.getTexto().toUpperCase() + "'";
        } else {
            FacesUtils.addInfoMessage("Erro no operador da consulta! Informe ao administrador do sistema.");
        }
        sql = sql + ")"; //+ " ORDER BY c.id DESC";
        controler.limparSqlsConsulta();
        controler.setSqlConsulta(sql);
        controler.setSqlClausulaTodosRegistros(tabelas + " " + sql.substring(sql.indexOf("WHERE", 14) - 1, sql.lastIndexOf(")") + 1));
        controler.setPaginaAtual(0);
        controler.atualizaTabela();
    }

//    public void consultar(ActionEvent event) {
//        UIInput input = (UIInput) event.getComponent().findComponent("itTexto");
//        if ((input.getValue() == null) || (input.getValue().toString().trim().equals(""))) {
//            FacesUtils.mensagemComponente(input, "Erro de Validação. ", "Valor é Obrigatório.");
//            return;
//        }
//        String textoConvertido = getItTexto().getValue().toString().replace("'", "''");
//        Criterio criterio = new Criterio(getSomCampo().getValue().toString(), getSomOperador().toString(), textoConvertido);
//        String sql = "";
//        String nomeClasse;
//        String nomeDaPagina = FacesContext.getCurrentInstance().getViewRoot().getViewId().toString();
//        BaseController controler = ((MetodosBotoes) Beans.getBean("botoes")).getControllerPagina();
//        if (nomeDaPagina.toUpperCase().equals("LOG DE OPERAÇÕES")) {
//            nomeClasse = "LogOperacoes";
//        } else {
//            nomeClasse = controler.getObjeto().getClass().getSimpleName();
//        }
//        String tabelas = "";
//        String campo = (String) criterio.getColuna();
//        if (campo.indexOf("/") != -1) {
//            tabelas = campo.substring(0, campo.indexOf("/"));
//            campo = campo.substring(campo.indexOf("/") + 1, campo.length());
//        }
//        sql = "SELECT DISTINCT c FROM " + nomeClasse + " c " + tabelas + " WHERE (";
//        campo = campo.substring(0,1).toLowerCase().concat(campo.substring(1));
//        campo = campo.replace("9", "");
//        sql += ("upper(c." + campo.replace(" ", "_") + ")");  //+ campo + ")");
//
//        if (criterio.getOperador().toLowerCase().trim().equals("igual a")) {
//            sql = sql + " = upper('" + criterio.getTexto() + "')";
//        } else if (criterio.getOperador().toLowerCase().trim().equals("maior que")) {
//            sql = sql + " > " + criterio.getTexto();
//        } else if (criterio.getOperador().toLowerCase().trim().equals("menor que")) {
//            sql = sql + " < " + criterio.getTexto();
//        } else if (criterio.getOperador().toLowerCase().trim().equals("maior ou igual")) {
//            sql = sql + " >= " + criterio.getTexto();
//        } else if (criterio.getOperador().toLowerCase().trim().equals("menor ou igual")) {
//            sql = sql + " <= " + criterio.getTexto();
//        } else if ((criterio.getOperador().toLowerCase().trim().equals("data igual a"))
//                || (criterio.getOperador().toLowerCase().trim().equals("hora igual a"))) {
//            sql = sql + " = '" + criterio.getTexto() + "'";
//        } else if ((criterio.getOperador().toLowerCase().trim().equals("data menor que"))
//                || (criterio.getOperador().toLowerCase().trim().equals("hora menor que"))) {
//            sql = sql + " < '" + criterio.getTexto() + "'";
//        } else if ((criterio.getOperador().toLowerCase().trim().equals("data maior que"))
//                || (criterio.getOperador().toLowerCase().trim().equals("hora maior que"))) {
//            sql = sql + " > '" + criterio.getTexto() + "'";
//        } else if ((criterio.getOperador().toLowerCase().trim().equals("data menor ou igual"))
//                || (criterio.getOperador().toLowerCase().trim().equals("hora menor ou igual"))) {
//            sql = sql + " <= '" + criterio.getTexto() + "'";
//        } else if ((criterio.getOperador().toLowerCase().trim().equals("data maior ou igual"))
//                || (criterio.getOperador().toLowerCase().trim().equals("hora maior ou igual"))) {
//            sql = sql + " >= '" + criterio.getTexto() + "'";
//        } else if (criterio.getOperador().toLowerCase().trim().equals("contendo")) {
//            sql = sql + " LIKE '%" + criterio.getTexto().toUpperCase() + "%'";
//        } else if (criterio.getOperador().toLowerCase().trim().equals("iniciando com")) {
//            sql = sql + " LIKE '" + criterio.getTexto().toUpperCase() + "%'";
//        } else if (criterio.getOperador().toLowerCase().trim().equals("terminando com")) {
//            sql = sql + " LIKE '%" + criterio.getTexto().toUpperCase() + "'";
//        } else if (criterio.getOperador().toLowerCase().trim().equals("diferente de")) {
//            sql = sql + " <> '" + criterio.getTexto().toUpperCase() + "'";
//        } else {
//            FacesUtils.mensInfo("Erro no operador da consulta!", " Informe ao administrador do sistema.");
//        }
//
//        sql = sql + ")"; //+ " ORDER BY c.id DESC";
////        pagina.getModeloConsultaSimples().setSqlConsulta(sql);
//        //    sqlClausulaTotalDeRegistros = ;
//        controler.limparSqlsConsulta();
//        controler.setSqlConsulta(sql);
//        controler.setSqlClausulaTodosRegistros(tabelas + " " + sql.substring(sql.indexOf("WHERE", 14) - 1, sql.lastIndexOf(")") + 1));
//        controler.setPaginaAtual(0);
//        controler.atualizaTabela();
////        pagina.getModeloConsultaSimples().setSqlClausulaConsulta(sqlClausulaTotalDeRegistros);
////
////        pagina.getModeloConsultaSimples().setRowModel(null);
////        pagina.getModeloConsultaSimples().setColumnsModel(null);
////        pagina.getModeloConsultaSimples().setPaginaAtualPaginacao(0);
//
//    }

    public void processarOperador(ValueChangeEvent vce) {
        if ((getSomOperador().equals("igual a")) || (getSomOperador().equals("contendo"))
                || (getSomOperador().equals("diferente de")) || (getSomOperador().equals("iniciando com")) || (getSomOperador().equals("terminando com"))) {
            setConversor(null);
        } else if ((getSomOperador().equals("maior que")) || (getSomOperador().equals("menor que")) || (getSomOperador().equals("maior ou igual")) || (getSomOperador().equals("menor ou igual"))) {
            setConversor(new NumberConverter());
        } else if ((getSomOperador().equals("data maior que")) || (getSomOperador().equals("data igual a")) || (getSomOperador().equals("data menor que")) || (getSomOperador().equals("data maior ou igual")) || (getSomOperador().equals("data menor ou igual"))) {
            DateTimeConverter sqlTime = new DateTimeConverter();
            sqlTime.setPattern("yyyy-MM-dd");
            setConversor(sqlTime);
        } else if ((getSomOperador().equals("hora maior que")) || (getSomOperador().equals("hora igual a")) || (getSomOperador().equals("hora menor que")) || (getSomOperador().equals("hora menor ou igual")) || (getSomOperador().equals("hora maior ou igual"))) {
            DateTimeConverter sqlTime = new DateTimeConverter();
            sqlTime.setPattern("HH:mm");
            setConversor(sqlTime);
        }

    }


}
